package com.tukez.tmdb.query

import com.tukez.tmdb.util.DisjointBoundedView._
import com.tukez.tmdb.model.Genre

sealed abstract class GenresSelector[A <% Int or Long or String or Genres.Genre or Genre] {
  val genres: List[A]
  val selector: String
}
case class GenresAnd[A <% Int or Long or String or Genres.Genre or Genre](genreArray: A*) extends GenresSelector[A] {
  val genres = genreArray.toList
  val selector = "and"
}
case class GenresOr[A <% Int or Long or String or Genres.Genre or Genre](genreArray: A*) extends GenresSelector[A] {
  val genres = genreArray.toList
  val selector = "or"
}

object Genres extends Enumeration {
  type Genre = GenreVal

  case class GenreVal(name: String, genreId: Long) extends Val(name)

  val Action = GenreVal("Action", 28)
  val ActionAdventure = GenreVal("Action & Adventure", 10759)
  val Adventure = GenreVal("Adventure", 12)
  val Animation = GenreVal("Animation", 16)
  val British = GenreVal("British", 10760)
  val Comedy = GenreVal("Comedy", 35)
  val Crime = GenreVal("Crime", 80)
  val Disaster = GenreVal("Disaster", 105)
  val Documentary = GenreVal("Documentary", 99)
  val Drama = GenreVal("Drama", 18)
  val Eastern = GenreVal("Eastern", 82)
  val Education = GenreVal("Education", 10761)
  val Erotic = GenreVal("Erotic", 2916)
  val Family = GenreVal("Family", 10751)
  val FanFilm = GenreVal("Fan Film", 10750)
  val Fantasy = GenreVal("Fantasy", 14)
  val FilmNoir = GenreVal("Film Noir", 10753)
  val Foreign = GenreVal("Foreign", 10769)
  val History = GenreVal("History", 36)
  val Holiday = GenreVal("Holiday", 10595)
  val Horror = GenreVal("Horror", 27)
  val Indie = GenreVal("Indie", 10756)
  val Kids = GenreVal("Kids", 10762)
  val Music = GenreVal("Music", 10402)
  val Musical = GenreVal("Musical", 22)
  val Mystery = GenreVal("Mystery", 9648)
  val NeoNoir = GenreVal("Neo-noir", 10754)
  val News = GenreVal("News", 10763)
  val Reality = GenreVal("Reality", 10764)
  val RoadMovie = GenreVal("Road Movie", 1115)
  val Romance = GenreVal("Romance", 10749)
  val SciFiFantasy = GenreVal("Sci-Fi & Fantasy", 10765)
  val ScienceFiction = GenreVal("Science Fiction", 878)
  val Short = GenreVal("Short", 10755)
  val Soap = GenreVal("Soap", 10766)
  val Sport = GenreVal("Sport", 9805)
  val SportingEvent = GenreVal("Sporting Event", 10758)
  val SportsFilm = GenreVal("Sports Film", 10757)
  val Suspense = GenreVal("Suspense", 10748)
  val Talk = GenreVal("Talk", 10767)
  val Thriller = GenreVal("Thriller", 53)
  val War = GenreVal("War", 10752)
  val WarPolitics = GenreVal("War & Politics", 10768)
  val Western = GenreVal("Western", 37)
}